package cn.sfa.common.taglib;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.sfa.entity.system.SaleSysCode;
/**
 * 用于缓存字典数据
* 类名称：DictionaryCache   
* 类描述：字典缓存类
* 创建人：lenovo   
* 创建时间：2012-2-22 下午12:13:33   
* 修改人：lenovo   
* 修改时间：2012-2-22 下午12:13:33   
* 修改备注： 使用spring自动注入方式
* @version v1.0
 */

public class DictionaryCache2 {

	Logger logger = LoggerFactory.getLogger(DictionaryCache2.class);
	
	// 字典缓存类静态实例
	private static DictionaryCache2 instance;
	// 字典项缓存数据
	private static List<SaleSysCode> cacheList;
	
	// 字典业务类
	
	private static DictionaryService2 sysDicService2;

	@SuppressWarnings("static-access")
	public void setSysDicService2(DictionaryService2 sysDicService2) {
		this.sysDicService2 = sysDicService2;
	}

	/**
	 * 私有构造方法
	 */
	private DictionaryCache2() {
		
	}

	/**
	 * 获取字典缓存实例方法
	 *
	 * @return 字典缓存实例
	 */
	@SuppressWarnings("static-access")
	public static DictionaryCache2 getInstance() {
				// 若未有实例，则先构造
		if (instance == null) {
			instance = new DictionaryCache2();// 构造实例
		}
		// 若实例中缓存值为空，则取缓存
		if (instance.cacheList == null) {
			instance.cacheList = instance.getAllSysDicKind();
		}		// 返回实例
		return instance;
	}

	/**
	 * 查找所有字典种类
	 *
	 * @return 所有字典种类
	 */
	protected List<SaleSysCode> getAllSysDicKind() {
		
		try {
			logger.info("sysDicService================="+sysDicService2);
			return sysDicService2.getAllSysDicKind();
		} catch (Exception e) {
			logger.error("字典缓存获取所有字典 记录错误！");
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * 取缓存数据
	 *
	 * @return 缓存数据
	 */
	@SuppressWarnings("static-access")
	public List<SaleSysCode> loadCacheList() {
		// 判断字典缓存是否为空
		if (getInstance().cacheList == null) {
			getInstance().reflashSysDicItemCache();// 刷新缓存
		}

		// 返回
		return getInstance().cacheList;
	}

	/**
	 * 刷新缓存数据
	 */
	public static void reflashSysDicItemCache() {
		cacheList = getInstance().getAllSysDicKind();
	}
	
	/**
	 * 根据code(主键查找)
	 * @param code
	 * @return
	 */
	@SuppressWarnings("static-access")
	public String getSysDicItemMean(String code) {
		// 对应的字典项意义值
		String mean = null;
		// 循环查找该kindNo和code下对应的sysDicItem对象
		for (SaleSysCode sysCode : this.getInstance().loadCacheList()) {
			if(sysCode.getSaleRecordId().equals(code)){
				mean = sysCode.getChnName();
			}
			
		}
		// 返回结果
		return (mean == null) ? "" : mean;
	}
	
	@SuppressWarnings("static-access")
	public String getSysDicItemMean(String code,String kindNo) {
		// 对应的字典项意义值
		String mean = null;
		// 循环查找该kindNo和code下对应的sysDicItem对象
		for (SaleSysCode sysCode : this.getInstance().loadCacheList()) {
			if(sysCode.getSaleRecordId().equals(code) && sysCode.getCodeClass().equals(kindNo)){
				mean = sysCode.getChnName();
			}
			
		}
		// 返回结果
		return (mean == null) ? "" : mean;
	}

	/**
	 * 查找对应种类的所有子项
	 *
	 * @param kindNo 字典种类编号
	 * @return 该字典种类下的所以字典项
	 */
	@SuppressWarnings("static-access")
	public List<SaleSysCode> getSysDicItemsByKindNo(String kindNo) {
		// 创建返回对象
		List<SaleSysCode> itemList = new ArrayList<SaleSysCode>();
		for (SaleSysCode sysCode : this.getInstance().loadCacheList()) {
			// 由kindNo找到对应的种类
			if (kindNo.equals(sysCode.getCodeClass())) {
				itemList.add(sysCode);
			}
		}
		// 返回结果
		return itemList;
	}
}
